package com.pb.wkflow.api.service;

import com.pb.infra.oth.entity.common.Result;
import com.pb.wkflow.api.controller.request.ProcDefineCreateRequest;
import com.pb.wkflow.api.controller.request.ProcDefineJsonRequest;
import com.pb.wkflow.api.controller.request.ProcDefineQueryRequest;
import com.pb.wkflow.api.controller.request.ProcessInstanceRequest;

import javax.servlet.http.HttpServletResponse;

/**
 * 流程定义Service
 * @author 苗益辉
 * @date 2022/9/1 15:07
 */
public interface ProcDefineService {

    /**
     * 创建空的bpmn，用于第一次创建
     * @param request 请求
     * @return Result
     */
    Result createEmptyBpmnModel(ProcDefineCreateRequest request);

    /**
     * 保存jsonModel
     * @param request 请求
     * @return Result
     */
    Result saveJsonModel(ProcDefineCreateRequest request);

    /**
     * 部署流程
     * @param request 请求
     * @return Result
     */
    Result deployModel(ProcDefineJsonRequest request);

    /**
     * 保存并部署流程
     * @param request 请求
     * @return Result
     */
    Result saveAndDeployModel(ProcDefineCreateRequest request);

    /**
     * 查询json列表
     * @param request request
     * @param pageSize 页数
     * @param pageNum 页码
     * @return PageInfo
     */
    Result getJsonList(ProcDefineJsonRequest request, Integer pageSize, Integer pageNum);

    /**
     * 获取流程图json
     * @param request request
     * @return Result
     */
    Result getJson(ProcDefineJsonRequest request);

    /**
     * 获取部署列表
     * @param request request
     * @param pageSize 页数
     * @param pageNum 页码
     * @return PageInfo
     */
    Result getDeployList(ProcDefineQueryRequest request, Integer pageSize, Integer pageNum);

    /**
     * 删除流程定义
     * @param request request
     */
    void deleteProcess(ProcessInstanceRequest request);

    /**
     * 使用当前流程版本
     * @param request request
     */
    void use(ProcessInstanceRequest request);

    /**
     * 修改版本描述
     * @param request request
     */
    void editDescription(ProcDefineJsonRequest request);

    void downModel(String defineId, HttpServletResponse response);
}
